//   /*******************************************************************************
//   * Author      :  ChuanQin Yu                                                   *
//   * Copyright   :  (c) ChuanQin Yu 2023-2023                                     *
//   * mail        :  ycq1014@gmail.com                                             *
//   * License     :  http://www.boost.org/LICENSE_1_0.txt                          *
//   ********************************************************************************

/**
 * @Author: ycq_work@163.com
 * @DATE: 2023/10/13
 * @Description: 
*/

#include "Local.h"

Local::Local(QObject *parent)
    : QThread(parent)
{

}

bool Local::isAudioFile(const QString &filePath)
{
    // 检查文件是否是音频文件
    QStringList audioFormats = QStringList() << "map3" << "wav" << "flac";
    QString fileExtension = QFileInfo(filePath).suffix();
    if(audioFormats.contains(fileExtension, Qt::CaseInsensitive))
    {
        return true;
    }

    return false;
}
QList<QFileInfo> Local::scan(const QString &directoryPath, const QStringList &filters)
{
    QList<QFileInfo> musicFiles;

    QDir dir(directoryPath);

    // 扫描所有的满足条件文件
    QStringList entries = dir.entryList(filters, QDir::Files | QDir::NoDotAndDotDot);

    for(const QString& entry : entries)
    {
        QString filePath = dir.filePath(entry);

        // 检查是否是音频文件
        if(isAudioFile(filePath))
        {
            // 保存文件信息
            QFileInfo fileInfo(filePath);
            musicFiles.append(fileInfo);
        }
    }

    QStringList subdirs = dir.entryList(QDir::Dirs | QDir::NoDotAndDotDot);
    for(const QString& subdir : subdirs)
    {
        QString subdirectoryPath = dir.filePath(subdir);
        QList<QFileInfo> subMusicFiles = scan(subdirectoryPath, filters);
        musicFiles.append(subMusicFiles);
    }

    return musicFiles;
}

